/*

// Anima.c - Isabel H. Manssour
// Um programa OpenGL simples que mostra a animação
// de quadrado em  uma janela GLUT.
// Este código está baseado no Bounce.c, exemplo
// disponível no livro "OpenGL SuperBible",
// 2nd Edition, de Richard S. e Wright Jr.

#include <GL/glut.h>
#include "math.h"
#include "emulador.h"
#include "opengl.h"

#define TEMPO_OPENGL 50


// Tamanho e posição inicial do quadrado
GLfloat quadradoPosicaoX = 10.0f;
GLfloat quadradoPosicaoY = 15.0f;
GLsizei quadrado_tamanho = 10;

// Largura e altura da janela
GLfloat janelaLargura;
GLfloat janelaAltura;

TBola *pbolas;
int numBolas=0;
TCirculo *ballToCircle(double sx, double sy, double raio, TCirculo *c) {
	c->eixoX = sx;
	c->eixoY = sy;
	c->raio =raio;
	return c;
}
void circle_create (TCirculo *circle) {
    int angle;
	glBegin (GL_POLYGON);
    for (angle = 0; angle< 360;angle++) //Circumference of circle = 2PI * r
        glVertex2f (circle->eixoX + sin(angle) * circle->raio, circle->eixoY+ cos(angle) * circle->raio);
    glEnd ();
}
// Função callback chamada para fazer o desenho
void Desenha(void)
{
	//glMatrixMode(GL_MODELVIEW);
	//glLoadIdentity();
	glClearColor (0, 0, 0, 0); // Clear to black
	glMatrixMode (GL_PROJECTION); // Projection view

	// Limpa a janela de visualização com a cor de fundo especificada
	glClear(GL_COLOR_BUFFER_BIT);

	glColor3f (1, 0.5, 0);  // Orange

	int i;
	TCirculo c;
	for (i=0; i<numBolas; i++) {
		ballToCircle(pbolas[i].sx,pbolas[i].sy, pbolas[i].raio,&c);
		circle_create(&c);
	}
	// Executa os comandos OpenGL
	glutSwapBuffers();
}

// Função callback chamada pela GLUT a cada intervalo de tempo
// (a window não está sendo redimensionada ou movida)
void Timer(int value)
{
	int i;
	for (i=0; i<numBolas; i++) {
		if (pbolas[i].raio>0)
			play(&pbolas[i]);
	}
	verificarColisoes(pbolas,numBolas,numBolas);

	// Redesenha o circulo com as novas coordenadas
	glutPostRedisplay();
	glutTimerFunc(TEMPO_OPENGL,Timer, 1);
}

// Inicializa parâmetros de rendering
void Inicializa (void)
{
	// Define a cor de fundo da janela de visualização como preta
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}

// Função callback chamada quando o tamanho da janela é alterado
void AlteraTamanhoJanela(GLsizei w, GLsizei h)
{
	// Evita a divisao por zero
	if(h == 0) h = 1;

	// Especifica as dimensões da Viewport
	glViewport(0, 0, w, h);
	//printf("ajuste: w:%f, h:%f",w,h);
	// Inicializa o sistema de coordenadas
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	if (w <= h)  {
		janelaAltura = 100.0f*h/w;
		janelaLargura = 100.0f;
	}
	else  {
		janelaLargura = 100.0f*w/h;
		janelaAltura = 100.0f;
	}
	// Estabelece a janela de seleção (left, right, bottom, top)
	gluOrtho2D(0.0f, janelaLargura, 0.0f, janelaAltura);
}

void execOpenGL(int argc, char** argv, TBola *bolas, int numbolas){
	pbolas = bolas;
	numBolas = numbolas;
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowSize(500,500);
	glutInitWindowPosition(10,10);
	glutCreateWindow("Anima");
	glutDisplayFunc(Desenha);
	glutReshapeFunc(AlteraTamanhoJanela);
	glutTimerFunc(TEMPO_OPENGL, Timer, 1);
	Inicializa();
	glutMainLoop();

	printf("\n address %p",pbolas);
	printf("\n raio: %4.2f ",pbolas[1].raio);
}
*/
